---
title: "Livecoding da(o)(e) MateBot, Robô Social"
date: 2020-08-18T19:39:16-03:00
---

## Objetivos de hoje:

- [x] Ler a documentação, aprender a usar e colocar no código o telegram.ext do PTB  
- [x] Alimentar o blog pra documentar o processo  
- [x] Fazer código funcional do MateBot (Dev)  

---

## Bibliografia (linkania):

* https://soundcloud.com/lfzawacki/sets/stream-list  
* https://github.com/python-telegram-bot/python-telegram-bot/wiki/Extensions-%E2%80%93-Your-first-Bot  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.bot.html  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.dispatcher.html  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.commandhandler.html  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.messagehandler.html  
* https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.callbackcontext.html  

---

## Transmissão ao vivo

Começou às 19:42 BRT (UTC -3)  

Ao vivo no Youtube no canal do Matehackers: <https://www.youtube.com/c/Exmachinae/live>  

Salvo no youtube:  
* <https://www.youtube.com/watch?v=I1mwYZ392i8>  
* <https://www.youtube.com/watch?v=ZMs1cKX7vCI>  
* <https://www.youtube.com/watch?v=sdsjVekln5Y>  

Título e descrição do vídeo:  

**Terça Sem Fim - Livecoding da(o)(e) MateBot, Robô Social**  

> MateBot é atualmente um(a)(e)(?) robô de Telegram que está sendo escrito usando Python, Flask, python-telegram-bot com licença de software livre. Esta série de vídeos serve para documentar e acompanhar o processo de desenvolvimento. Além do canal do Youtube do Matehackers, também está sendo documentado no repositório git público e no blog Terça Sem Fim. Estes vídeos estão disponíveis via IPFS e Tor pra quem não consegue assistir pelo Youtube.

Código fonte do MateBot: https://github.com/matehackers/tg-matebot

Blog da Terça Sem Fim:
- Web: https://denise.matehackers.org/tercasemfim/
- Tor:
  - http://ftkbuej5ggf45o5n37evqj6qhxjobrz7lyqvdz22z3me6yyuepmhgcad.onion/
  - http://gytdkc5fei2ow5s7hdrppbin4rlogqzqhbabvvra2qb3flccuxsnrdqd.onion/tercasemfim/
- IPFS:
  - https://ipfs.io/ipns/denise.matehackers.org/tercasemfim/

Grupo do Matehackers no telegram: <https://t.me/matehackerspoa>  
Meu usuário no telegram: <https://t.me/desobedientecivil>  

Ajude o Hackerspace Matehackers a se manter: https://matehackers.org/renda

`#Python #Flask #Telegram #DataScience #AI #ML #IA`

---

## Pré produção

Quem não sabe faz ao vivo.

Divulguei nos grupos de Python do telegram que a transmissão está acontecendo aproximadamente às 20:00  

Após isto o pessoal começou a entrar na transmissão ao vivo e me avisaram que o microfone não estava funcionando. Passei a apanhar do Windows e tentar consertar isto. Aparentemente o problema era o hardware e não o sistema operacional. Voltando ao assunto aproximadamente às 20:40 com quase uma hora de transmissão já.

Agora estou com problemas de conexão. Parei a transmissão para buscar um cabo cat6 grande pra conectar o laptop direto no rack da rede.

Então o youtube parou de receber o streaming, não obstante o OBS dizia que o streaming estava acontecendo. Parei o streaming (isto levou vários minutos) pra começar de novo. 21:00 horas e ainda não conseguimos começar de fato a transmissão.

Às 21:36 BRT estamos no ar, com transmissão funcionando e microfone funcionando.

---

## Desenvolvimento

O ponto de partida para o estudo de hoje é o <https://github.com/python-telegram-bot/python-telegram-bot/wiki/Extensions-%E2%80%93-Your-first-Bot>. Abri uma janela do Chrome no OBS e passei a estudar a documentação.

Aprendi a configurar mais de um bot ao mesmo tempo (o telegram permite que cada usuário tenha até 20 bots) lendo a [documentação](https://python-telegram-bot.readthedocs.io/en/latest/telegram.bot.html).  

Comecei a configurar o Updater lendo a [documentação](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html). Será importante posteriormente estudar os seguintes parâmetros que eu ainda não domino:  
* [user_sig_handler](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html#telegram.ext.Updater.user_sig_handler)  
* [update_queue](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html#telegram.ext.Updater.update_queue)  
* [job_queue](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html#telegram.ext.Updater.job_queue)  
* [persistence](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.updater.html#telegram.ext.Updater.persistence)  

Outra coisa que será pertinente ler posteriormente é [tratar exceções](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Exception-Handling).  

O **telegram.ext.Updater** basicamente "recebe" as atualizações do servidor do telegram (tudo o que acontece, mensagens, usuários entrando em grupos, mensagens fixadas, pessoas editando ou apagando mensagens, etc.) e o **telegram.ext.Dispatcher** "envia" atualizações pro servidor do telegram (por exemplo o bot enviar mensagens para grupos). É pertinente ler a [documentação do Dispatcher](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.dispatcher.html) pra se aprofundar nas possibilidades.  

Interagi com o pessoal na transmissão ao vivo no youtube e tive que fazer uma pausa compulsória pra resolver uma questão no mundo real durante alguns minutos aproximadamente às 23:06, voltando aproximadamente às 23:33.  

Descobri uma forma melhor do que usar **getattr()** para tratar comandos que é o [CommandHandler](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.commandhandler.html) do PTB. Na [documentação](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Types-of-Handlers) é explicado os vários tipos de "Handlers" e há alguns exemplos de como usar. Coisas importantes para estudar posteriormente:  
* [filters](https://python-telegram-bot.readthedocs.io/en/latest/telegram.ext.commandhandler.html#telegram.ext.CommandHandler.filters)  
* [CallbackContext](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Transition-guide-to-Version-12.0#context-based-callbacks)  
* [Error Handler Callback](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Transition-guide-to-Version-12.0#error-handler-callbacks)  
* [Persistence](https://github.com/python-telegram-bot/python-telegram-bot/wiki/Making-your-bot-persistent)  

Aproximadamente às 02:27 (já quarta feira) eu enviei o [commit 0af802d](https://github.com/matehackers/tg-matebot/commit/0af802d9ee6ee1ee3f8747da65a1d2c73f6d52d3) para o [repositório no github](https://github.com/matehackers/tg-matebot) com a versão funcional do robô (v0.1.1.0) que ecoa as mensagens e responde o comando **/start**.  

Em decorrência de muito tempo sem dormir e sem comer adequadamente, terei que encerrar a transmissão ao vivo e consequentemente a gravação do vídeo. Aproveito para encerrar o blog de hoje também.  

Transmissão ao vivo encerrada aproximadamente às 02:33 BRT (UTC -3) de 19 de agosto de 2020.  

> Não curtam o vídeo, não sigam o canal, não se inscrevam para receber notificações. Usem youtube-dl para obter o vídeo, assistam no VLC. Ou melhor, assistam o vídeo via IPFS.  
